﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using ClickLand.CorporacionPlaza.Presentacion.Contratos.AdministracionCliente;
using ClickLand.CorporacionPlaza.Presentacion.Presentadores.AdministracionCliente;
using ClickLand.Web.UI.WebControls;

namespace AdministracionCliente
{
    /// <summary> Clase que hace de code behind para la vista que se encarga de agregar cliente </summary>
    public partial class AgregarCliente : Page, IAgregarCliente
    {
        #region Atributos

        /// <summary> Objeto que posee la declaracion del presentador de la vista </summary>
        private PresentadorAgregarCliente _presentador;

        #endregion

        #region Eventos

        /// <summary>Evento de inicializacion de la página.</summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void Page_Init(object sender, EventArgs e)
        {
            _presentador = new PresentadorAgregarCliente(this);
        }


        /// <summary> Metodo que se ejecuta cuando se carga la pagina. </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                _presentador.CargarPagina();
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton aceptar del mensaje de exito </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnAceptarExito(object sender, EventArgs e)
        {
            Response.Redirect("~/Default.aspx");

        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton de cancelar en el agregar cliente </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnCancelarAgregarClienteOnClick(object sender, EventArgs e)
        {
            Response.Redirect("~/Default.aspx");
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton de agregar cliente </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnAceptarAgregarClienteOnClick(object sender, EventArgs e)
        {
            Page.Validate("AgregarCliente");
            if (Page.IsValid)
                _presentador.MostrarConfirmacion();
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton de regresar en el mensaje de error </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnRegresarErrorOnClick(object sender, EventArgs e)
        {
            mvPanelAgregarCliente.SetActiveView(vAgregarCliente);
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton de regresar en la confirmacion </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnRegresarConfirmacionClienteOnClick(object sender, EventArgs e)
        {
            mvPanelAgregarCliente.SetActiveView(vAgregarCliente);
        }


        /// <summary> Metodo que se ejecuta cuando se da click al boton de aceptar en la confirmacion </summary>
        /// <param name="sender">Objeto que generó el evento.</param>
        /// <param name="e">Argumento del evento.</param>
        protected void BtnAceptarConfirmacionClienteOnClick(object sender, EventArgs e)
        {
            _presentador.AgregarCliente();
        }


        /// <summary> Metodo que se ejecuta cuando se selecciona un tipo de cliente </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void DdlTipoClienteSelectedIndexChanged(object sender, EventArgs e)
        {
            _presentador.SeleccionarTipoCliente();
        }

        #endregion

        #region Propiedades

        /// <summary> Propiedad que retorna el control que muestra los tipos de cliente </summary>
        public ClickLandDropDownList TipoCliente
        {
            get { return ddlTipoCliente; }
        }


        /// <summary> Propiedad que retorna el control que lista la cedula </summary>
        public ClickLandDropDownList LetraCedulaRif
        {
            get { return ddlTipoDocumento; }
        }


        /// <summary> Propiedad que retorna el control donde se indica el nombre del cliente </summary>
        public ClickLandExTextBox Nombre
        {
            get { return tbNombreCliente; }
        }


        /// <summary> Propiedad que retorna el control donde se indica el rif del cliente </summary>
        public ClickLandExTextBox CedulaRif
        {
            get { return tbDocumento; }
        }


        /// <summary> Propiedad que retorna el control donde se indica el codigo de area del celular </summary>
        public ClickLandDropDownList CodigoAreaCelular
        {
            get { return ddlCodigoAreaCelular; }
        }


        /// <summary> Propiedad que retorna el control donde se indica el numero de telefono del celular </summary>
        public ClickLandExTextBox TelefonoCelular
        {
            get { return tbTelefonoCelular; }
        }


        /// <summary> Propiedad que retorna el control donde se indica el codigo de area de la oficina </summary>
        public ClickLandExTextBox CodigoAreaOficina
        {
            get { return tbCodigoAreaTelefonoOficina; }
        }


        /// <summary> Propiedad que retorna el control donde se indica el numero de telefono de la oficina </summary>
        public ClickLandExTextBox TelefonoOficina
        {
            get { return tbTelefonoOficina; }
        }


        /// <summary> Propiedad que retorna el control donde se indica el correo electronico</summary>
        public ClickLandExTextBox Correo
        {
            get { return tbEmail; }
        }


        /// <summary> Propiedad que retorna el control que administra las diferentes vistas </summary>
        public MultiView Paneles
        {
            get { return mvPanelAgregarCliente; }
        }


        /// <summary> Propiedad que retorna el control que muestra el mensaje de error </summary>
        public View VistaError
        {
            get { return vMensajeError; }
        }


        /// <summary> Propiedad que retorna el control que muestra el mensaje de exito </summary>
        public View VistaExito
        {
            get { return vMensajeExito; }
        }


        /// <summary> Propiedad que retorna el control que muestra la vista de confirmacion </summary>
        public View VistaConfirmacion
        {
            get { return vConfirmacion; }
        }


        /// <summary> Propiedad que retorna el control que indica el nombre del responsable1 </summary>
        public ClickLandExTextBox Responsable1
        {
            get { return tbResponsable1; }
        }


        /// <summary> Propiedad que retorna el control que indica el nombre del responsable3 </summary>
        public ClickLandExTextBox Responsable2
        {
            get { return tbResponsable2; }
        }


        /// <summary> Propiedad que retorna el control que indica el nombre del responsable3 </summary>
        public ClickLandExTextBox Responsable3
        {
            get { return tbResponsable3; }
        }


        /// <summary> Propiedad que retorna el control que muestra el nombre del cliente en la confirmacion </summary>
        public ClickLandLabel NombreConfirmacion
        {
            get { return lblNombreConfirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra el correo de del cliente en la confirmacion </summary>
        public ClickLandLabel CorreoConfirmacion
        {
            get { return lblCorreoConfirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra el documento de identificacion del cliente en la confirmacion </summary>
        public ClickLandLabel DocumentoIdentificacionConfirmacion
        {
            get { return lblDocumentoConfirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra el numero de celular del cliente en la confirmacion </summary>
        public ClickLandLabel NumeroCelular
        {
            get { return lblTelefonoCelularConfirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra el numero de la oficina del cliente en la confirmacion </summary>
        public ClickLandLabel NumeroOficina
        {
            get { return lblTelefonoOficinaConfirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra el responsable del cliente en la confirmacion </summary>
        public ClickLandLabel Responsable1Confirmacion
        {
            get { return lblResponsable1Confirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra el responsable2 del cliente en la confirmacion </summary>
        public ClickLandLabel Responsable2Confirmacion
        {
            get { return lblResponsable2Confirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra el responsable3 del cliente en la confirmacion </summary>
        public ClickLandLabel Responsable3Confirmacion
        {
            get { return lblResponsable3Confirmacion; }
        }


        /// <summary> Propiedad que retorna el control que muestra el tipo de cliente seleccionado </summary>
        public ClickLandLabel TipoClienteConfirmacion
        {
            get { return lblTipoClienteConfirmacion; }
        }


        /// <summary> Propiedad que asigna la visibilidad de los controles segun el tipo de cliente </summary>
        public bool EsClienteJuridico
        {
            set
            {
                tbResponsable1.Visible = value;
                tbResponsable2.Visible = value;
                tbResponsable3.Visible = value;
                lblResposanble1.Visible = value;
                lblResponsable2.Visible = value;
                ClickLandLabel3.Visible = value;
                lblResponsable1Confirmacion.Visible = value;
                lblResponsable2Confirmacion.Visible = value;
                lblResponsable3Confirmacion.Visible = value;
                lblResponsable3Confirmacion.Visible = value;
                ClickLandLabel8.Visible = value;
                ClickLandLabel9.Visible = value;
                ClickLandLabel4.Visible = value;
            }
        }

        #endregion

        /// <summary> Metodo que valida la seleccion de los telefonos del cliente </summary>
        /// <param name="source"></param>
        /// <param name="args"></param>
        protected void ValidarTelefonos(object source, ServerValidateEventArgs args)
        {
            bool invalidoCelular = (ddlCodigoAreaCelular.SelectedIndex == 0) ||
                                   string.IsNullOrEmpty(tbTelefonoCelular.Text);
            bool invalidoOficina = (tbCodigoAreaTelefonoOficina.Text.Length < 4) ||
                                   string.IsNullOrEmpty(tbCodigoAreaTelefonoOficina.Text);

            args.IsValid = !(invalidoCelular && invalidoOficina);

        }
    }
}